package com.titaniume.java;

import org.junit.Test;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;

/**
 * @author huangrenfei
 * @version 1.0
 * @description String类与其他结构之间的转换
 *
 * @date 2021/10/2 14:44
 */
public class StringTest1 {




    /*
    *
    *  String 和byte[] 之间的转换
    *  String ----> 调用String的getBytes()
    *
    * 编码：String --->bytep[ 调用Stirng的getBytes
    * 解码：byte [] ---->String 调用String的构造器
    *
    *
    * 编码 字符串--------> 字节 （看得懂---->看不懂的二进制数据）
    * 解码字节 --------> 字符串 （看不懂的二进制数据----> 看得懂）
    *
    *
    * 说明： 解码时： 要求解码使用的字符集必须与编码的字符集一致，否之出现乱码
    * */
    @Test
    public void test3() throws UnsupportedEncodingException {
        String str1 = "abc123中国";
        byte[] bytes = str1.getBytes(); //使用默认的字符集，进行转换
        System.out.println(Arrays.toString(bytes));

        byte[] bytes1 = str1.getBytes("gbk"); //使用gbk 字符集进行编码
        System.out.println(Arrays.toString(bytes1));


        System.out.println("********************************");

        String str2 = new String(bytes); //使用默认的字符集进行解码
        System.out.println(str2);


        String str3 = new String(bytes1);
        System.out.println(str3);  //出现乱码 原因： 编码解码集不一致


        String str4 = new String(bytes1,"gbk");
        System.out.println(str4);

    }





    /*
    *
    * String 与char[] 之间的转换
    *
    * String--->char: 调用String的toCharArray()
    * char []--->String: 调用String的构造器
    *
    * */
    @Test
    public void test2(){
        String str1 = "abc123";  //题目： a21cb3
        char[] charArray = str1.toCharArray();
        for (int i = 0; i < charArray.length; i++) {
            System.out.println(charArray[i]);
        }

        char[] arr = {'1', 'b', 'c', '2'};
        String str2 = new String(arr);
        System.out.println(str2);
    }

    /*
    * 复习：
    * String 与基本数据类型、包装类之间转换
    * String---> 基本数据类型、
    *
    *
    *
    *
    *
    *
    *
    *
    *
    * 基本数据类型、包装类 ------>String :调用String重载的valueOf(xxx)
    * */
    @Test
    public  void test1(){
        String str1="123";
        int num = Integer.parseInt(str1);
        System.out.println(num);

        String str2 = String.valueOf(num);
        //在堆里面
        String str3 = num + "";
        System.out.println(str2);
        System.out.println(str3);

        System.out.println(str1 == str3);
    }
}
